package com.stone.design.mode.proxy.cglib;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * cglib动态代理方法拦截器
 *
 * @author Mr_wenpan@163.com 2022/3/14 5:17 下午
 */
public class CglibProxy implements MethodInterceptor {

    /**
     * 重写方法拦截在方法前和方法后加入业务
     * Object obj为目标对象
     * Method method为目标方法
     * Object[] params 为参数，
     * MethodProxy proxy CGlib方法代理对象
     */
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println("执行cglib动态代理的目标方法前.");
        // 执行父类的相对于方法
        Object result = methodProxy.invokeSuper(obj, args);
        System.out.println("执行cglib动态代理的目标方法后.");
        return result;
    }
}